package com.assic.utils.db;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Lang;

/**
 * 数据库导入工具
 * 
 * @author 贵源 <br>
 *         create at 2014年5月11日
 */
public class DBImportor {
	/**
	 * 内存insert导入
	 * 
	 * @param insertSqls
	 *            sql脚本
	 * @param dao
	 *            dao对象
	 * @return 影响的记录条数
	 */
	public static long importFromSQLList(List<String> insertSqls, Dao dao) {
		List<Sql> sqls = new ArrayList<Sql>();
		for (String sql : insertSqls) {
			sqls.add(Sqls.create(sql));
			if (sqls.size() == 10000) {// 达到10000
				dao.execute(Lang.collection2array(sqls));// 执行
				sqls = new ArrayList<Sql>();// 清空
			}
		}
		if (sqls.size() != 0) {
			dao.execute(Lang.collection2array(sqls));
		}
		return insertSqls.size();
	}

	/**
	 * insert File 导入
	 * 
	 * @param file
	 *            待导入的insert文件
	 * @param dao
	 *            dao对象
	 * @return 影响的记录条数
	 * @throws IOException
	 */
	public static long importFromInsertFile(File file, Dao dao) throws IOException {
		long i = 0;
		BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
		String sql = "";
		List<Sql> sqls = new ArrayList<Sql>();
		while ((sql = reader.readLine()) != null) {
			sqls.add(Sqls.create(sql));
			if (sqls.size() == 10000) {// 达到10000
				dao.execute(Lang.collection2array(sqls));// 执行
				sqls = new ArrayList<Sql>();// 清空
			}
			i++;
		}
		if (sqls.size() != 0) {
			dao.execute(Lang.collection2array(sqls));
		}
		reader.close();
		return i;
	}
}
